import re
from utils.functions import pretty_print_dict

# def prompt_problem_classification(details_dict: dict, type_dict: dict):
#     """
#     :param details_dict: 问询详情字典{问题题目：str, 材料内容：str, 提问内容：str}
#     :return prompt:完整提示词
#     """
#     details_dict = pretty_print_dict(details_dict)
#     type_dict = pretty_print_dict(type_dict)
#
#     prompt = f"""# CONTEXT #
# <details_dict>与</details_dict>之中的文本代表问询招股书的字典，包含“问题问题”、“材料内容”、“提问内容”。
# <type_dict>与</type_dict>之中为分类字典，key为索引，value为分类名称。
# 问询招股书的字典：
# <details_dict>
# {details_dict}
# </details_dict>，
# 分类字典：
# <type_dict>
# {type_dict}
# </type_dict>。
#
# # OBJECTIVE #
# 请帮我根据<type_dict>与</type_dict>之中的分类字典来给<details_dict>与</details_dict>之中的问询招股书的字典内容赋予分类名称。
# 请输出一个长度为1的列表，里面为该分类名称的索引。
# # STYLE #
# 请以交易所IPO业务的外审人员的角度来分类。
# # TONE #
# 正式。
# # AUDIENCE #
# 我们的受众是投行IPO业务的内审人员和交易所IPO业务的外审人员。
# # RESPONSE #
# 输出的列表长度唯一，且分类分类名称的索引的数据类型为int。
# 请严格遵循以上要求和下面输出示例的格式输出，只输出列表，列表以外的内容不要输出！！！
# 请严格遵循以上要求和下面输出示例的格式输出，只输出列表，列表以外的内容不要输出！！！
#
# 输出示例：
# [int]
# """
#     prompt = prompt.strip()
#     return prompt

def prompt_problem_classification(details_dict: dict, type_dict: dict):
    """
    :param details_dict: 问询详情字典{问题标题：str, 依据材料的内容：str, 请发行人说明或者披露的内容：str}
    :param type_dict: 类型字典{索引: 问题类型}
    :return prompt:完整提示词
    """
    details_dict = pretty_print_dict(details_dict)
    type_dict = pretty_print_dict(type_dict)

    prompt = f"""# CONTEXT #
<details_dict>与</details_dict>之中的文本代表《发行人及保荐机构关于第n轮审核问询函的回复》中某一个被问询问题的字典，其中key包含“问题标题”、“依据材料的内容”、“请发行人说明或者披露的内容”。
<type_dict>与</type_dict>之中为问题类型字典，key为索引，value为IPO上市申请过程中招股说明书被交易所可能被问询的问题类型名称。

《发行人及保荐机构关于第n轮审核问询函的回复》中某一个被问询问题的字典：
<details_dict>
{details_dict}
</details_dict>；
问题类型字典：
<type_dict>
{type_dict}
</type_dict>。

# OBJECTIVE #
根据<type_dict>与</type_dict>之中的问题类型字典，找出<details_dict>与</details_dict>之中内容中最相关的问题类型名称。
如果存在最相关的问题类型名称，请输出一个列表。列表中的元素为最相关的问题类型名称的key索引。
如果不存在最相关的问题类型名称，请输出一个空列表[]。
# STYLE #
请以交易所IPO业务的审核人员的角度来分类。
# TONE #
正式。
# AUDIENCE #
我们的受众是投行IPO业务的审核人员和交易所IPO业务的审核人员。
# RESPONSE #
输出的列表数据为list of int，其中每个元素为问题类型字典的索引。
如果存在最相关的问题类型名称，请输出一个列表。
如果不存在最相关的问题类型名称，请输出一个空列表[]。
请严格遵循以上要求和下面输出示例的格式输出，只输出列表，列表以外的内容不要输出！！！
请严格遵循以上要求和下面输出示例的格式输出，只输出列表，列表以外的内容不要输出！！！
请严格遵循以上要求和下面输出示例的格式输出，只输出列表，列表以外的内容不要输出！！！

输出示例（存在最相关的问题类型名称）：
[int, ..., int]

输出示例（不存在最相关的问题类型名称）：
[]
"""
    prompt = prompt.strip()
    return prompt

def prompt_content_classification(content: str, type_dict: dict):
    """
    :param content: 招股书切片
    :param type_dict: 类型字典{索引: 问题类型}
    :return prompt:完整提示词
    """
    content = pretty_print_dict(content)
    type_dict = pretty_print_dict(type_dict)

    prompt = f"""# CONTEXT #
<content>与</content>之中的文本代表《招股说明书》中的在IPO审核过程中被问询的片段。
<type_dict>与</type_dict>之中为问题类型字典，key为索引，value为IPO上市申请过程中招股说明书被交易所可能被问询的问题类型名称。

《招股说明书》中的在IPO审核过程中被问询的片段：
<content>
{content}
</content>；
问题类型字典：
<type_dict>
{type_dict}
</type_dict>。

# OBJECTIVE #
根据<type_dict>与</type_dict>之中的问题类型字典，找出最有可能被交易所问询的<content>与</content>之中内容的问题类型名称。
如果存在被问询的问题类型名称，请输出一个列表。列表中的元素为被问询的问题类型名称的key索引。
如果不存在被问询的问题类型名称，请输出一个空列表[]。
# STYLE #
请以交易所IPO业务的审核人员的角度来分类。
# TONE #
正式。
# AUDIENCE #
我们的受众是投行IPO业务的审核人员和交易所IPO业务的审核人员。
# RESPONSE #
输出的列表数据为list of int，其中每个元素为问题类型字典的索引。
如果存在被问询的问题类型名称，请输出一个列表。
如果不存在被问询的问题类型名称，请输出一个空列表[]。
请严格遵循以上要求和下面输出示例的格式输出，只输出列表，列表以外的内容不要输出！！！
请严格遵循以上要求和下面输出示例的格式输出，只输出列表，列表以外的内容不要输出！！！
请严格遵循以上要求和下面输出示例的格式输出，只输出列表，列表以外的内容不要输出！！！

输出示例（存在被问询的问题类型名称）：
[int, ..., int]

输出示例（不存在被问询的问题类型名称）：
[]
"""
    prompt = prompt.strip()
    return prompt

if __name__ == '__main__':

    print(prompt_problem_classification({}, {}))


